package demo2;

import java.util.Scanner;
//尝试解决

/**
 * 与上一个demo一致，加上了synchronized，他会触发内存屏障，然后让缓存失效，从主内存中读取，然后就可以知道flag被修改了
 * 进入synchronized同步块时，会强制清空线程的工作内存，从主内存重新加载变量，所以可以感知到flag的变化
 */
public class DEMO_02 {
    static int flag = 0;

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            System.out.println("t1线程启动");
            while (flag == 0) {
                synchronized (DEMO_02.class){

                }
            }
            System.out.println("t1线程结束");
        });

        Thread t2 = new Thread(() -> {
            System.out.println("t2线程启动");
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个非零整数");
            flag = scanner.nextInt();
            System.out.println("t2线程结束");
        });
        //启动线程
        t1.start();
        t2.start();

    }
}
